import { createStore } from 'vuex'

export default createStore({
  state: {
    count: 0
  },
  getters: {
    showNum(state) {
      return '当前最新数量：【'+state.count+'】'
    }
  },
  // 只有mucations中定义函数，才有权力修改state中的数据
  mutations: {
    add(state) {
      // 不要再mutations函数中，执行异步操作
      /* setTimeout(() => {
        state.count++
      }, 1000) */

      state.count++
    },
    addN(state, step) { 
      state.count += step
    },
    sub(state) { 
      state.count--;
    },
    subN(state, step) { 
      state.count -= step;
    }
  },
  actions: {
    addAsync(context) {   // context相当于createStore实例对象
      setTimeout(() => {
        // 在actions中，不能直接修改state中的数据；
        // 必须通过context.commit() 触发某个mutation
        context.commit('add')
      }, 1000)
    },
    addNAsync(context, step) { 
      setTimeout(() => {
        context.commit('addN', step)
      }, 1000);
    },
    subAsync(context) { 
      setTimeout(() => { 
        context.commit('sub')
      }, 1000)
    },
    subNAsync(context, step) { 
      setTimeout(() => { 
        context.commit('subN', step)
      }, 1000)
    }
  },
  modules: {
  }
})
